import java.util.*;

/**
 * @author LKQ
 * @date 2022/5/18 16:51
 * @description 对于计算器，一般都用栈来模拟操作，每次遍历到数字末尾时，根据前面的字符 preSign 来决定计算方式：
 * 1. +：将数字压入栈中
 * 2. -：将 -num 压入栈中
 * 3：*或/: 将栈顶元素与 num 计算后压入栈中，
 */
public class Solution {
    public static void main(String[] args) {

    }
    public int calculate(String s) {
        Deque<Integer> stack = new LinkedList<Integer>();
        // 第一个数字，之前的运算符号默认为 +
        char preSign = '+';
        int num = 0;
        int n = s.length();
        for (int i = 0; i < n; ++i) {
            if (Character.isDigit(s.charAt(i))) {
                num = num * 10 + s.charAt(i) - '0';
            }
            if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ' || i == n - 1) {
                switch (preSign) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    default:
                        stack.push(stack.pop() / num);
                }
                preSign = s.charAt(i);
                num = 0;
            }
        }
        int ans = 0;
        while (!stack.isEmpty()) {
            ans += stack.pop();
        }
        return ans;
    }
}
